package com.vhall.component.framework.common.utils;

import java.util.Map;

/**
 * 方法功能说明：获取远程客户端的真实IP
 */
public class IpUtils {

    private IpUtils() {
        throw new IllegalStateException("Utility class");
    }

    /**
     * 方法功能说明：获取远程客户端的真实IP
     * Administrator
     * 2016年6月27日 上午10:44:30
     *
     * @param headers
     * @return
     */
    public static String getIpAddr(Map<String, String> headers) {
        String ipAddress = headers.get("x-forwarded-for");
        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = headers.get("Proxy-Client-IP");
        }
        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = headers.get("WL-Proxy-Client-IP");
        }
        // 对于通过多个代理的情况，第一个IP为客户端真实IP,多个IP按照','分割
        if (ipAddress != null && ipAddress.length() > 15 && ipAddress.indexOf(",") > 0) {
            // "***.***.***.***".length() =15
            ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
        }
        return ipAddress;
    }
}
